package org.dbstar.scheduler.control;

import java.util.List;
import java.util.Set;

import org.dbstar.scheduler.beans.Job;
import org.dbstar.scheduler.beans.JobDependency;
import org.dbstar.scheduler.beans.MatchJobDependency;
import org.dbstar.scheduler.control.exception.DaoException;
import org.dbstar.scheduler.identifier.Identifier;


/**
 * Job依赖触发控制器
 * 
 * @author 代波
 * @since 1.0.0
 * @version 1.0.0
 * @date 2012-6-13
 */
public interface JobDependencyController {
	/**
	 * 获得所有JobDependency的列表，所有JobDependency按照jobConfIdentifier,identifier顺序排列
	 * 
	 * @return JobDependency列表，若无任何JobDependency，返回size为0的List。
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public abstract List<JobDependency> getAllJobDependencies() throws DaoException;

	/**
	 * 获得所有指定JobConf的JobDependency的列表，所有JobDependency按照identifier顺序排列
	 * 
	 * @param confIdentifier 指定的JobConf标识
	 * @return JobDependency列表，若无任何JobDependency，返回size为0的List。
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public abstract List<JobDependency> getJobDependencies(Identifier confIdentifier) throws DaoException;

	/**
	 * 根据依赖标识来查找指定的JobDependency
	 * 
	 * @param dependIdentifier 依赖标识
	 * @return 依赖标识对应的JobDependency，若JobDependency不存在，则返回null。
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public abstract JobDependency getJobDependency(Identifier dependIdentifier) throws DaoException;

	/**
	 * 增加新的JobDependency。
	 * 
	 * @param dependency 新JobDependency
	 * @return 新增JobDependency的标识
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public abstract Identifier addDependency(JobDependency dependency) throws DaoException;

	/**
	 * 更新JobDependency信息
	 * 
	 * @param dependency 需要更新的JobDependency
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public abstract void updateJobDependency(JobDependency dependency) throws DaoException;

	/**
	 * 删除标识对应的依赖触发
	 * 
	 * @param dependIdentifier 依赖触发标识
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public void removeJobDependency(Identifier dependIdentifier) throws DaoException;

	/**
	 * 查询Job能触发的JobDependency信息，并返回相应触发参数。
	 * 
	 * @param job 触发源job
	 * @return 能触发的JobDependency信息及触发参数列表，若无任何匹配，返回size为0的Set。
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public abstract Set<MatchJobDependency> findMatch(Job job) throws DaoException;
}
